package message

import (
	"google.golang.org/protobuf/proto"
	"zinx_game/protobuf/proto_go"
)

// EncodeMessage 将消息编码为protobuf二进制格式并封装
func EncodeMessage(cmd proto_go.MessageID, pbMsg proto.Message) ([]byte, error) {
	data, err := proto.Marshal(pbMsg)
	if err != nil {
		return nil, err
	}
	// 创建消息封装
	wrapper := &proto_go.MessageWrapper{
		Cmd:  cmd,
		Data: data,
	}
	// 序列化封装结构
	return proto.Marshal(wrapper)
}

// DecodeMessage 解析封装的消息
func DecodeMessage(encoded []byte) (proto_go.MessageID, []byte, error) {
	wrapper := &proto_go.MessageWrapper{}
	if err := proto.Unmarshal(encoded, wrapper); err != nil {
		return 0, nil, err
	}
	return wrapper.Cmd, wrapper.Data, nil
}
